package com.shujia.wyh.day12;

import java.io.*;

/*
    对比不同的读写速度：
        数据源：F:\录屏\23期day12 字节流 1.mp4
        目的地：E:\a1.mp4
   普通字节流：
        1、读取一个字节，写一个字节
        2、读取一个字节数组，写一个字节数组
   字节缓冲流：
        1、读取一个字节，写一个字节
        2、读取一个字节数组，写一个字节数组
 */
public class CopyFileDemo4 {
    public static void main(String[] args) {
        String inputLine = "F:\\录屏\\23期day12 字节流 1.mp4";

//        fun1(inputLine); //读取一个字节，写一个字节   > 5min
//        fun3(inputLine); //字节缓冲流读取一个字节，写一个字节   >2min 比fun1速度快3倍左右

//        fun2(inputLine); //读取一个字节数组，写一个字节数组  623 毫秒
        fun4(inputLine); //读取一个字节数组，写一个字节数组  499 毫秒


    }
    public static void fun4(String line){
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(line));
            bos = new BufferedOutputStream(new FileOutputStream("E:\\a3.mp4"));
            byte[] bytes = new byte[2048];
            int length = 0;
            long start = System.currentTimeMillis();
            System.out.println("开始进行复制。。。。。");
            while ((length = bis.read(bytes))!=-1){
                bos.write(bytes,0,length);
                bos.flush();
            }
            System.out.println("复制结束！");
            long end = System.currentTimeMillis();
            System.out.println("普通字节流读取一个字节数组，写一个字节数组的速度为："+(end - start) + " 毫秒");

        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(bos!=null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(bis!=null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    //1、读取一个字节，写一个字节
    public static void fun3(String line){
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(line));
            bos = new BufferedOutputStream(new FileOutputStream("E:\\a2.mp4"));
            int i = 0;
            long start = System.currentTimeMillis();
            System.out.println("开始进行复制。。。。。");
            while ((i=bis.read())!=-1){
                bos.write(i);
                bos.flush();
            }
            System.out.println("复制结束！");
            long end = System.currentTimeMillis();
            System.out.println("普通字节流读取一个字节数组，写一个字节数组的速度为："+(end - start) + " 毫秒");

        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(bos!=null){
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(bis!=null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }



    //2、读取一个字节数组，写一个字节数组
    public static void fun2(String line){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建字节输入流对象
            fis = new FileInputStream(line);
            fos = new FileOutputStream("E:\\a1.mp4");
            byte[] bytes = new byte[2048];
            int length = 0;
            long start = System.currentTimeMillis();
            System.out.println("开始进行复制。。。。。");
            while ((length = fis.read(bytes))!=-1){
                fos.write(bytes,0,length);
            }
            System.out.println("复制结束！");

            long end = System.currentTimeMillis();
            System.out.println("普通字节流读取一个字节数组，写一个字节数组的速度为："+(end - start) + " 毫秒");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    //求出普通字节流读写的速度
    //1、读取一个字节，写一个字节
    public static void fun1(String line) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建字节输入流对象
            fis = new FileInputStream(line);
            fos = new FileOutputStream("E:\\a1.mp4");
            int i = 0;
            long start = System.currentTimeMillis();
            System.out.println("开始进行复制。。。。。");
            while ((i = fis.read()) != -1) {
                fos.write(i);
            }
            System.out.println("复制结束！");

            long end = System.currentTimeMillis();
            System.out.println("普通字节流读取一个字节，写一个字节的速度为："+(end - start) + " 毫秒");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}
